在資料庫管理上,root 相當於擁有所有權限的最大管理者,針對不同使用者規劃給予相應的權限是很重要的。總不能讓所有使用者都有能隨意變更操作系統內容的權限,在資料庫管理安全上勢必會有疑慮和影響。
在資安DB管理上,除了審視建立使用者時是否給予適當權限,同時定期更換帳密也是很重要的一部分。
從頭開始寫文章才發現這個地方有更動XDD -Mysql5.7版後不再使用password作為密碼字段,而是改成authentication_string 所以在之前的圖1這句語法是無法生效的,會噴沒有字段password錯誤。
還記得安裝完預設root是沒使用密碼登入的嗎!首先來設定重要的root密碼~
SELECT User, Host, authentication_string, plugin FROM mysql.user;
這邊注意到root地方密碼目前空的沒問題,但plugin欄位使用 auth_socket 這會導致我們用修改密碼SQL語法時無法生效(對於auth_socket 密碼是沒有作用的)!!所以要配置密碼,需要在同一命令中(同時)更改插件和設置密碼。
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '1234';
在查詢一次就會看到是正常的了,試著以新密碼登入看看!
*** ALTER USER 'root'@'localhost' IDENTIFIED BY '新密碼';
*** SET PASSWORD FOR 'root'@'localhost' = PASSWORD("新密碼");
*** UPDATE mysql.user SET authentication_string = PASSWORD("新密碼") where User = 'root' and Host = 'localhost';
FLUSH PRIVILEGES; (UPDATE完後要執行這句刷新MySQL的系統權限相關表)
這邊會注意到指令同樣都是更改密碼為何update那句還要flush權限才會生效呢??
透過FLUSH PRIVILEGES會將數據表的數據重建一份內存權限資料,如果內存的權限數據和磁盤數據的權限數據相同,則無需執行FLUSH PRIVILEGES,使用在權限數據可能存在不一致的情況下使用。
使用上來說:
不過在重要的更改root密碼上還是建議flush一下保險~
Q: root密碼出問題忘記登不進去怎麼辦?
A: 在設定檔中配置參數-> skip-grant-tables
(功能:mysql啟動登入時不使用權限表認證,也就是所有使用者都可以不打密碼就做登入!! 所以記得修改完密碼後要去設定檔改回來。)
使用部分呢讓我們用例子解釋常用語法 ex.要新增一個專門給開發人員寫入資料的使用者
CREATE USER 'dev_write'@'172.8.%' IDENTIFIED BY 'Only2Write'
SHOW GRANTS FOR 'dev_write'@'172.8.%';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE ON powers.* TO 'dev_write'@'172.8.%' ;
補充: *.* 等於全部資料庫
REVOKE ALL PRIVILEGES ON powers.* FROM 'dev_write'@'172.8.%';
DROP USER 'dev_write'@'172.8.%';
詳細解釋 權限意義與分類級別參考官方文件這部分-> Privileges Supported by MySQL
https://dev.mysql.com/doc/refman/8.0/en/grant.html
下一篇來帶大家認識 MYSQL系統層相關紀錄日誌~